package com.zlk.algorithm.algorithm.tools.slidingWindow049;

import org.junit.Test;

// 累加和大于等于target的最短子数组长度
// 给定一个含有 n 个正整数的数组和一个正整数 target
// 找到累加和 >= target 的长度最小的子数组并返回其长度
// 如果不存在符合条件的子数组返回0
// 测试链接 : https://leetcode.cn/problems/minimum-size-subarray-sum/

//滑动窗口
public class Code01_MinimumSizeSubarraySum {

    @Test
    public void test1(){
        int[] nums = new int[]{2,3,1,2,4,3};
        int target = 7;
        minSubArrayLen(target,nums);
    }


    public int minSubArrayLen(int target, int[] nums) {
        int ans = Integer.MAX_VALUE;
        int sum=0;
        for (int l = 0,r=0; r <nums.length ; r++) {
            sum+=nums[r];
            if(sum>=target){
                while (l<r&&sum-nums[l]>=target){
                    sum-=nums[l++];
                }
            }
            if(sum>=target){
                ans = Math.min(ans,r-l+1);
            }
        }
        return ans==Integer.MAX_VALUE?0:ans;
    }
}
